package com.my.ds.impl.stack;

/**
 * 基于数组实现的顺序栈
 *
 * @author: marshal
 * @date: 2023-02-17 9:57
 */
public class ArrayStack {
    /**
     * 元素数组
     */
    private final int[] items;

    /**
     * 栈中的元素个数
     */
    private int count;

    /**
     * 栈的大小
     */
    private int n;

    /**
     * 栈的初始化
     *
     * @param n 栈的大小
     */
    public ArrayStack(int n) {
        this.items = new int[n];
        this.n = n;
        this.count = 0;
    }

    /**
     * 入栈操作
     *
     * @param e 元素
     * @return true/false
     */
    public boolean push(int e) {
        // 如果空间不够了，直接返回false
        if (count == n) {
            return false;
        }
        // 将元素e放到下标为count的位置
        items[count] = e;
        ++count;
        return true;
    }

    /**
     * 出栈操作
     *
     * @return 返回出栈的元素
     */
    public int pop() {
        if (count == 0) {
            throw new RuntimeException("stake is empty.");
        }
        // 返回最后一个元素
        int lastElement = items[count - 1];
        --count;
        return lastElement;
    }

    /**
     * 返回栈的大小
     *
     * @return 栈的大小
     */
    public int size() {
        return count;
    }
}
